home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <console.h>
- #include <SerialDvr.h>
-
- #define ECHO FALSE
- #define OUTPUT_COOKED TRUE
- #define SERBUFSIZ 1000
-
- #define XONCHAR 0x11
- #define XOFFCHAR 0x13
- #define BACKSPACECHAR 0x08
- #define ESCAPECHAR 0x1B
- #define DELETECHAR 0x7f
-
- void introduction (void);
- OSErr serialinit(void);
- void serialwrite(void);
- int serialcharsavail(void);
- void getserialchars(long );
- void displaybuff(long );
- void cleanup(void);
- char interpret (char);
-
- int ch;
- char *inbuf,*sermgrbuf;
-
- main()
- {
- OSErr err;
- int count;
-
- introduction();
- csetmode(C_RAW,stdout);/* set up the console so it won't wait for input */
- if ((err =serialinit())) {
- printf("the serial initializations have failed id %d",err);
- }
- else
- {
- while (ch != ESCAPECHAR)
- {
- ch =getchar();
- if (ch > 0)
- {
- if (OUTPUT_COOKED) ch = interpret(ch);
- serialwrite();
- if (ECHO) putchar(ch);
- }
- if (count = serialcharsavail())
- {
- getserialchars(count);
- displaybuff(count);
- }
- }
- }
- cleanup();
- }
-
- void introduction()
- {
- printf(" this program reads and writes to them modem port at 2400 baud\n");
- printf("it uses the 8bits 1 stop bit no parity\n");
- printf("press <esc> key to exit\n");
- }
-
- OSErr serialinit()
- {
- OSErr err;
- SerShk flags;
-
- if ((err = RAMSDOpen(sPortA))) return err;
- if ( (err = SerReset( AinRefNum,baud2400 + data8 + stop10 +noParity)))
- { RAMSDClose(sPortA);
- return err;
- }
-
- /* give the serial manager a SERBUFSIZ buffer */
- if (! (sermgrbuf = (char *)NewPtr (SERBUFSIZ))) {
- err = SerSetBuf(AinRefNum, sermgrbuf, SERBUFSIZ);
- }
- if ( (err = SerReset( AoutRefNum,baud2400 + data8 + stop10 +noParity)))
- { RAMSDClose(sPortA);
- return err;
- }
-
- /* set handshaking */
- flags.fXOn = TRUE;
- flags.fInX = TRUE;
- flags.xOn = XONCHAR;
- flags.xOff = XOFFCHAR;
- if (( err = SerHShake(AinRefNum,&flags))){
- RAMSDClose(sPortA);
- return err;
- }
-
- if (!( inbuf = (char *) NewPtr(SERBUFSIZ))) return MemError();
- return 0;
- }
-
- void serialwrite()
- {
- OSErr err;
- char temp;
- long num;
-
- num = 1;
- temp = ch;
-
- err = FSWrite(AoutRefNum, &num, &temp);
- }
-
- int serialcharsavail()
- {
- long count;
- SerGetBuf(AinRefNum,&count);
- return count;
- }
-
- void getserialchars(long count)
- {
- OSErr err;
-
- err = FSRead(AinRefNum,&count,inbuf);
- }
-
- void displaybuff(long count)
- {
- long i;
-
- for (i=0; i < count; putchar(inbuf[i++]));
- }
-
- void cleanup()
- {
- RAMSDClose(sPortA);
- if (inbuf) DisposPtr(inbuf);
- }
-
- char interpret(char ch)
- {
- switch (ch)
- {
- /* add your special cases here */
- case BACKSPACECHAR:
- return(DELETECHAR);
- default:
- return(ch);
- }
- }
-